The present invention relates to code generation, and in particular, systems and methods for template reverse engineering in a code generation software system.
Historically, computer software programs for controlling the operation of computers was created and developed by computer programmers writing the code that defined the operations to be performed. For example, in the early days, computer programmers would write code in such languages as FORTRAN, PASCAL, C, C++, Java, and many other languages. The code would then be compiled to generate machine language instructions (i.e., zeros and ones) for execution on the computer system's hardware. However, developing code by hand is a very time consuming labor intensive process, in some cases requiring hundreds or even thousands of programmer hours to implement a complex software system.
Recently, the concept of code generation has attracted increasing attention. For example, rather than writing computer programming code line by line, code generation paradigms posit that a software developer specify the desired operational behavior of the software and the functional specification may be used to automatically generate code in any desired language or for any desired platform. However, the promise of automatic code generation has not gone completely fulfilled because of inherent difficulties in implementing such systems.
The paradigm of Model-Driven Software Development motivates the lifting of fine-grained code structures and development to coarser-grained models and higher levels of designing. This abstraction process shall approximate the developer's mental model of the underlying implementation and, hence, reduce the necessary effort in production of such. Based on readily developed system architecture models, appropriate code generators produce later on executable runtime code.
For example, one approach to automatic code generation is referred to as Model-Driven Software Development (“MDSD” or “MMD”). FIG. 1 illustrates a typical MDSD architecture. The example MDSD software includes a model 101, template 102, code generator 103 that generates code 104. A model 101 describes the structure and behavior of a software system. This description may be a high level description of states, entities, transitions, and a variety of other factors for describing the software, The model may be an instance of a meta model for describing a system at a higher level of abstraction (i.e., more generally). The model may be specified using a modeling language, for example. A modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. The rules are used for interpretation of the meaning of elements in the structure. Modeling languages can be used to specify system requirements, structures, and behaviors. Modeling languages are intended to be used to precisely specify systems so that stakeholders (e.g., customers, operators, analysts, designers) can better understand the system being modeled. Example modelling technologies are Eclipse Modeling Framework (“EMF”), whose language to create metamodels is called “ECore” (the metametamodel), and the MetaObject Facility (“MOF”) from the Object Management Group with the metametamodel also called “MOF” or a smaller version “EMOF” (essential MOF).
Templates 102 are used to generate code based on a model in the context of a meta-model. Templates control output code generation. For example, a template may be used to access the model, execute logic, and perform various other tasks. The template may be a text file that is interpreted by the code generator 103 at runtime to generate code 104. Templates may include one or more import statements, one or more extension statements, and one or more define blocks (i.e., definitions) and may be written in template languages such as XPAND and MOFScript, for example.
However, developing templates for the above mentioned code generators is a time-consuming and error-prone process. Current MDSD tools commonly provide editors for template languages, used by generator engines. Unfortunately, the useful features of such editors, like e.g., syntax highlighting, code completion or even full compilation, support only corresponding template languages and not the language the generated code adheres to. This very often results in templates that are themselves valid but produce erroneous or insufficient code. Hence, each time a generator template is changed, the developer has to re-execute the generator to afterwards check the generated code for errors or insufficiencies.
FIG. 2 illustrates the time consuming process of debugging templates. One or more models 201 and a template 202 may be provided to a code generator 203. The code generator 203 may generate one or more code artifacts 204 (e.g., methods, procedures, or classes in one or more files, etc. . . . ). A developer may review the generated code and determine that some code is valid at 205, but that other generated code is erroneous or does not satisfy desired system requirements at 206. Accordingly, a user must manually revise the template to implement the desired change to the generated code.
Revising templates from erroneous code can be a time consuming process that undermines the promise of model driven development. Thus, there is a need for the improved systems and methods for template engineering. The present invention solves these and other problems by providing systems and methods for template reverse engineering in a code generation software system.